package cn.lg.soar.boot.fc.service;

import cn.lg.soar.boot.fc.entity.bo.RoomBo;
import cn.lg.soar.boot.fc.entity.vo.FcStatisticsVo;
import cn.lg.soar.boot.fc.entity.vo.RoomEasyVo;
import cn.lg.soar.boot.fc.entity.vo.RoomVo;
import cn.lg.soar.boot.fc.params.RoomParams;
import cn.lg.soar.common.model.HttpResult;
import cn.lg.soar.common.model.PageQuery;
import cn.lg.soar.common.model.PageResult;
import cn.lg.soar.database.base.service.IBaseService;
import cn.lg.soar.boot.fc.entity.Room;
import cn.lg.soar.database.query.QueryParams;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 房间表
 * @author ZhuanZ（无密码）
 * @since 2025-01-14
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface RoomService extends IBaseService<Room> {

    /**
     * 创建数据
     * @param roomBo
     * @return
     */
    HttpResult<Serializable> create (RoomBo roomBo);

    /**
     * 更新房间信息
     * @param roomBo
     * @return
     */
    HttpResult<Void> update (RoomBo roomBo);

    /**
     * 通过id获取数据
     * @param id
     * @return
     */
    Room getData (Long id);

    /**
     * 获取数据vo
     * @param id
     * @return
     */
    RoomVo getVoData (Long id);

    /**
     * 获取数据简单vo
     * @param id
     * @return
     */
    RoomEasyVo getEasyVoData (Long id);

    /**
     *
     * @param pageQuery
     * @param params
     * @return
     */
    PageResult<RoomVo> queryResultVo (PageQuery pageQuery, QueryParams params, RoomParams roomParams);

    /**
     * 获取room 信息
     * @param params
     * @return
     */
    List<Room> getListByOtherId (QueryParams params);

    /**
     * 获取房间统计信息 展示 总数，总建筑面积，总使用面积
     * @return
     */
    FcStatisticsVo getStatistics (Long campusId);

    /**
     * 类型统计
     * @param pageQuery
     * @param params
     * @return
     */
    PageResult<FcStatisticsVo> queryResultRoomTypeStaVo (PageQuery pageQuery, QueryParams params,
                                                         RoomParams roomParams);

    /**
     * 导出表格
     * @param filename
     * @param params
     * @param resp
     */
    void exportExcel (String filename, QueryParams params, HttpServletResponse resp);

    /**
     * 导入房间信息
     * @param files
     * @return
     */
    HttpResult<Void> importExcel (MultipartFile files);

    /**
     * 拖拽排序
     */
    HttpResult<Serializable> updateSort(List<Map<String, Integer>> sortedData);

}
